{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "146edaf1",
   "metadata": {},
   "source": [
    "This script is to double check the result of pandas dataframe agent to make sure they are correct."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2bdbb3c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6bf12173",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('../data/ds_salaries.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6911d737",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3755, 11)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# how many rows and columns are there in the dataset?\n",
    "\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "cbe29552",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "work_year             0\n",
       "experience_level      0\n",
       "employment_type       0\n",
       "job_title             0\n",
       "salary                0\n",
       "salary_currency       0\n",
       "salary_in_usd         0\n",
       "employee_residence    0\n",
       "remote_ratio          0\n",
       "company_location      0\n",
       "company_size          0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# are there any missing values?\n",
    "\n",
    "df.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5e0635d4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['work_year', 'experience_level', 'employment_type', 'job_title',\n",
       "       'salary', 'salary_currency', 'salary_in_usd', 'employee_residence',\n",
       "       'remote_ratio', 'company_location', 'company_size'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what are the columns?\n",
    "\n",
    "df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e6c1b46b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "work_year                4\n",
       "experience_level         4\n",
       "employment_type          4\n",
       "job_title               93\n",
       "salary                 815\n",
       "salary_currency         20\n",
       "salary_in_usd         1035\n",
       "employee_residence      78\n",
       "remote_ratio             3\n",
       "company_location        72\n",
       "company_size             3\n",
       "dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# how many categories are in each column?\n",
    "\n",
    "df.nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f63cfff1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "job_title\n",
       "Head of Machine Learning    6000000.0\n",
       "Principal Data Architect    3000000.0\n",
       "Data Analytics Lead          922500.0\n",
       "Power BI Developer           400000.0\n",
       "Data Science Tech Lead       375000.0\n",
       "Name: salary, dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# which are the top 5 jobs that have the highest median salary?\n",
    "\n",
    "df.groupby('job_title')['salary'].median().sort_values(ascending=False).head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4b41a875",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "employment_type\n",
       "FT    0.995238\n",
       "PT    0.003571\n",
       "FL    0.001190\n",
       "Name: proportion, dtype: float64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what is the percentage of data scientists who are working full time?\n",
    "\n",
    "df[df['job_title'] == 'Data Scientist']['employment_type'].value_counts(normalize=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c8d2b152",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "company_location\n",
       "AE    100\n",
       "AL     50\n",
       "AM      0\n",
       "AR    100\n",
       "AS    100\n",
       "     ... \n",
       "TH    100\n",
       "TR    100\n",
       "UA    100\n",
       "US    100\n",
       "VN      0\n",
       "Name: remote_ratio, Length: 72, dtype: int64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# which company location has the most employees working remotely? \n",
    "# Note: the answer is wrong. There are a lot of companies that has the same value (100), and the last one was taken as answer.\n",
    "\n",
    "df.groupby('company_location')['remote_ratio'].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "daa10eb1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "company_location\n",
       "AE    100\n",
       "GR    100\n",
       "HU    100\n",
       "ID    100\n",
       "IL    100\n",
       "IN    100\n",
       "IR    100\n",
       "JP    100\n",
       "KE    100\n",
       "LU    100\n",
       "MX    100\n",
       "MY    100\n",
       "NG    100\n",
       "NL    100\n",
       "PH    100\n",
       "PK    100\n",
       "PL    100\n",
       "PR    100\n",
       "PT    100\n",
       "SE    100\n",
       "SG    100\n",
       "SI    100\n",
       "SK    100\n",
       "TH    100\n",
       "TR    100\n",
       "UA    100\n",
       "US    100\n",
       "HR    100\n",
       "IE    100\n",
       "CF    100\n",
       "BE    100\n",
       "CR    100\n",
       "GB    100\n",
       "CL    100\n",
       "AU    100\n",
       "CH    100\n",
       "CZ    100\n",
       "AS    100\n",
       "DE    100\n",
       "DK    100\n",
       "CO    100\n",
       "CA    100\n",
       "EE    100\n",
       "EG    100\n",
       "BR    100\n",
       "ES    100\n",
       "FI    100\n",
       "FR    100\n",
       "AR    100\n",
       "BS     50\n",
       "Name: remote_ratio, dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('company_location')['remote_ratio'].max().sort_values(ascending=False).head(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "564ec166",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>work_year</th>\n",
       "      <th>experience_level</th>\n",
       "      <th>employment_type</th>\n",
       "      <th>job_title</th>\n",
       "      <th>salary</th>\n",
       "      <th>salary_currency</th>\n",
       "      <th>salary_in_usd</th>\n",
       "      <th>employee_residence</th>\n",
       "      <th>remote_ratio</th>\n",
       "      <th>company_location</th>\n",
       "      <th>company_size</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2023</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Principal Data Scientist</td>\n",
       "      <td>80000</td>\n",
       "      <td>EUR</td>\n",
       "      <td>85847</td>\n",
       "      <td>ES</td>\n",
       "      <td>100</td>\n",
       "      <td>ES</td>\n",
       "      <td>L</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2023</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Data Scientist</td>\n",
       "      <td>175000</td>\n",
       "      <td>USD</td>\n",
       "      <td>175000</td>\n",
       "      <td>CA</td>\n",
       "      <td>100</td>\n",
       "      <td>CA</td>\n",
       "      <td>M</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2023</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Data Scientist</td>\n",
       "      <td>120000</td>\n",
       "      <td>USD</td>\n",
       "      <td>120000</td>\n",
       "      <td>CA</td>\n",
       "      <td>100</td>\n",
       "      <td>CA</td>\n",
       "      <td>M</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2023</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Applied Scientist</td>\n",
       "      <td>222200</td>\n",
       "      <td>USD</td>\n",
       "      <td>222200</td>\n",
       "      <td>US</td>\n",
       "      <td>0</td>\n",
       "      <td>US</td>\n",
       "      <td>L</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2023</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Applied Scientist</td>\n",
       "      <td>136000</td>\n",
       "      <td>USD</td>\n",
       "      <td>136000</td>\n",
       "      <td>US</td>\n",
       "      <td>0</td>\n",
       "      <td>US</td>\n",
       "      <td>L</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3744</th>\n",
       "      <td>2020</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Machine Learning Engineer</td>\n",
       "      <td>40000</td>\n",
       "      <td>EUR</td>\n",
       "      <td>45618</td>\n",
       "      <td>HR</td>\n",
       "      <td>100</td>\n",
       "      <td>HR</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3745</th>\n",
       "      <td>2021</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Director of Data Science</td>\n",
       "      <td>168000</td>\n",
       "      <td>USD</td>\n",
       "      <td>168000</td>\n",
       "      <td>JP</td>\n",
       "      <td>0</td>\n",
       "      <td>JP</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3749</th>\n",
       "      <td>2021</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Data Specialist</td>\n",
       "      <td>165000</td>\n",
       "      <td>USD</td>\n",
       "      <td>165000</td>\n",
       "      <td>US</td>\n",
       "      <td>100</td>\n",
       "      <td>US</td>\n",
       "      <td>L</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3750</th>\n",
       "      <td>2020</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Data Scientist</td>\n",
       "      <td>412000</td>\n",
       "      <td>USD</td>\n",
       "      <td>412000</td>\n",
       "      <td>US</td>\n",
       "      <td>100</td>\n",
       "      <td>US</td>\n",
       "      <td>L</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3754</th>\n",
       "      <td>2021</td>\n",
       "      <td>SE</td>\n",
       "      <td>FT</td>\n",
       "      <td>Data Science Manager</td>\n",
       "      <td>7000000</td>\n",
       "      <td>INR</td>\n",
       "      <td>94665</td>\n",
       "      <td>IN</td>\n",
       "      <td>50</td>\n",
       "      <td>IN</td>\n",
       "      <td>L</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2516 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      work_year experience_level employment_type                  job_title  \\\n",
       "0          2023               SE              FT   Principal Data Scientist   \n",
       "3          2023               SE              FT             Data Scientist   \n",
       "4          2023               SE              FT             Data Scientist   \n",
       "5          2023               SE              FT          Applied Scientist   \n",
       "6          2023               SE              FT          Applied Scientist   \n",
       "...         ...              ...             ...                        ...   \n",
       "3744       2020               SE              FT  Machine Learning Engineer   \n",
       "3745       2021               SE              FT   Director of Data Science   \n",
       "3749       2021               SE              FT            Data Specialist   \n",
       "3750       2020               SE              FT             Data Scientist   \n",
       "3754       2021               SE              FT       Data Science Manager   \n",
       "\n",
       "       salary salary_currency  salary_in_usd employee_residence  remote_ratio  \\\n",
       "0       80000             EUR          85847                 ES           100   \n",
       "3      175000             USD         175000                 CA           100   \n",
       "4      120000             USD         120000                 CA           100   \n",
       "5      222200             USD         222200                 US             0   \n",
       "6      136000             USD         136000                 US             0   \n",
       "...       ...             ...            ...                ...           ...   \n",
       "3744    40000             EUR          45618                 HR           100   \n",
       "3745   168000             USD         168000                 JP             0   \n",
       "3749   165000             USD         165000                 US           100   \n",
       "3750   412000             USD         412000                 US           100   \n",
       "3754  7000000             INR          94665                 IN            50   \n",
       "\n",
       "     company_location company_size  \n",
       "0                  ES            L  \n",
       "3                  CA            M  \n",
       "4                  CA            M  \n",
       "5                  US            L  \n",
       "6                  US            L  \n",
       "...               ...          ...  \n",
       "3744               HR            S  \n",
       "3745               JP            S  \n",
       "3749               US            L  \n",
       "3750               US            L  \n",
       "3754               IN            L  \n",
       "\n",
       "[2516 rows x 11 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what is the most frequent job position for senior-level employees?\n",
    "\n",
    "df[df['experience_level'] == 'SE']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "3f5b3c29",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    Data Engineer\n",
       "Name: job_title, dtype: object"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df['experience_level'] == 'SE']['job_title'].mode()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "679f8cb6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "company_size\n",
       "M    3153\n",
       "L     454\n",
       "S     148\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what are the categories of company size? What is the proportion of employees they have? What is the total salary they pay for their employees?\n",
    "\n",
    "df['company_size'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "b52fb3dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "company_size\n",
       "L     53708646\n",
       "M    451290619\n",
       "S     11577549\n",
       "Name: salary_in_usd, dtype: int64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('company_size')['salary_in_usd'].sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "20e474ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='company_size'>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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263//Oc/Onv2rC5cuHDFmpKSkiv2XV1drerqamvd7XZfx9UCAIDmyud3hE6cOKFp06ZpzZo1Cg4O9vXhG9XixYtlt9utJTw8vKlbAgAAjcjnQaiwsFCnT5/WHXfcoYCAAAUEBGj79u1avny5AgIC5HA4dP78eZWXl3vtV1paqrCwMElSWFjYZd8iq1+/Vo3NZlNISIg6duyoVq1aXbGm/hiXmjt3rioqKqzlxIkTN/xzAAAAtz6fB6GRI0fqwIEDKioqspYhQ4YoPj7e+ufbbrtNubm51j6HDx/W8ePHFRUVJUmKiorSgQMHvL7dlZOTI5vNpr59+1o1Fx+jvqb+GIGBgRo8eLBXTV1dnXJzc62aSwUFBclms3ktAACg5fL5M0K33367+vXr57WtTZs26tChg7U9ISFBKSkpat++vWw2m5555hlFRUVp6NChkqRRo0apb9++mjhxotLS0uRyuTR//nwlJSUpKChIkvTkk0/qzTff1KxZs/TYY49p27Ztevfdd7V582brvCkpKZo8ebKGDBmiu+66S2+88Yaqqqo0ZcoUX182AABohhrlYelref311+Xv769x48apurpaMTEx+vWvf22Nt2rVSllZWXrqqacUFRWlNm3aaPLkyXrhhResmoiICG3evFnPPvusli1bpi5duui3v/2tYmJirJrx48frzJkzSk1Nlcvl0sCBA5WdnX3ZA9QAAMBMfh6Px9PUTdyq3G637Ha7KioqbvmPybrP2XztIlzTsSVjmrqFFoM56TvMS99gTvrOrT4nG/L7m781BgAAjEUQAgAAxiIIAQAAYxGEAACAsQhCAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACMRRACAADGIggBAABjEYQAAICxCEIAAMBYBCEAAGAsghAAADAWQQgAABiLIAQAAIxFEAIAAMYiCAEAAGMRhAAAgLEIQgAAwFgEIQAAYCyCEAAAMBZBCAAAGIsgBAAAjEUQAgAAxiIIAQAAYxGEAACAsQhCAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACMRRACAADGIggBAABjEYQAAICxfB6EFi9erDvvvFO33367OnXqpNjYWB0+fNir5ty5c0pKSlKHDh3Utm1bjRs3TqWlpV41x48f15gxY9S6dWt16tRJM2fOVG1trVfNRx99pDvuuENBQUHq0aOHMjIy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HThwoBYsWHDNn8tHH32ku+66S23atFFoaKjuvvtuffHFF5Iu/2jMz8/vsqV79+7W+MGDB3X//ferbdu2cjgcmjhxov71r39dswcA10YQAvCtzJ07V0uWLNGCBQv06aefau3atXI4HKqqqlJMTIzatWun3bt3a8OGDfrLX/6i5ORkr/23bdumU6dOKS8vT6+99poWLlyoBx98UO3atVNBQYGefPJJPfHEEzp58qTXfjNnztSMGTO0b98+RUVFaezYsfr3v/8t6etw1qVLF23YsEGffvqpUlNTNW/ePL377rtex/jwww/1+eef68MPP9Tq1auVkZGhjIwMSdJjjz2mQ4cOaffu3Vb9vn37tH//fk2ZMuWqP5Pa2lrFxsbqBz/4gfbv36/8/HwlJiZ+45ut//nPf1rLZ599ph49emjEiBGSpPLycv3whz/UoEGDtGfPHmVnZ6u0tFQ/+clPrv0vB8C1eQDgBrndbk9QUJDnrbfeumxs1apVnnbt2nkqKyutbZs3b/b4+/t7XC6Xx+PxeCZPnuzp1q2b58KFC1ZNr169PMOHD7fWa2trPW3atPH88Y9/9Hg8Hs/Ro0c9kjxLliyxampqajxdunTxvPLKK9/Ya1JSkmfcuHHWev25a2trrW0//vGPPePHj7fW77//fs9TTz1lrT/zzDOee++99+o/FI/H8+9//9sjyfPRRx9dcXzhwoWeAQMGXLa9rq7O86Mf/cgzePBgz1dffeXxeDyeF1980TNq1CivuhMnTngkeQ4fPnzNXgBcHXeEANywQ4cOqbq6WiNHjrzi2IABA9SmTRtr29133626ujodPnzY2vb9739f/v7//78ih8Oh/v37W+utWrVShw4ddPr0aa/jR0VFWf8cEBCgIUOG6NChQ9a2FStWaPDgwfrOd76jtm3batWqVTp+/LjXMb7//e+rVatW1nrnzp29zjN16lT98Y9/1Llz53T+/HmtXbtWjz322DV/Lu3bt9ejjz6qmJgYjR07VsuWLdM///nPa+43b9485efn689//rNCQkIkSZ988ok+/PBDtW3b1lp69+4tSfr888+veUwAV0cQAnDD6n9Zfxu33Xab17qfn98Vt9XV1V33MdetW6fnnntOCQkJ2rp1q4qKijRlyhSdP3/+mue++Dxjx45VUFCQNm7cqPfee081NTV6+OGHr6uHd955R/n5+Ro2bJjWr1+v//qv/9LHH3/8jfV/+MMf9Prrr2vjxo367ne/a22vrKzU2LFjVVRU5LUcOXLE+vgMwI0jCAG4YT179lRISIhyc3MvG+vTp48++eQTVVVVWdt27Nghf39/9erV61uf++JQUVtbq8LCQvXp08c6z7Bhw/T0009r0KBB6tGjxw3dPQkICNDkyZP1zjvv6J133lFcXFyDwt+gQYM0d+5c7dy5U/369dPatWuvWJefn6/HH39cv/nNbzR06FCvsTvuuEPFxcXq3r27evTo4bVcfLcNwI0hCAG4YcHBwZo9e7ZmzZql3//+9/r888/18ccf63e/+53i4+MVHBysyZMn6+DBg/rwww/1zDPPaOLEiXI4HN/63CtWrNDGjRtVUlKipKQknT171vrYqmfPntqzZ4+2bNmiv//971qwYIHXQ88N8fjjj2vbtm3Kzs6+ro/FJOno0aOaO3eu8vPz9cUXX2jr1q06cuSIFdQu5nK59KMf/UhxcXGKiYmRy+WSy+XSmTNnJElJSUkqKyvThAkTtHv3bn3++efasmWLpkyZogsXLtzQNQH4fwFN3QCA5m3BggUKCAhQamqqTp06pc6dO+vJJ59U69attWXLFk2bNk133nmnWrdurXHjxum1117zyXmXLFmiJUuWqKioSD169NCmTZvUsWNHSdITTzyhffv2afz48fLz89OECRP09NNP64MPPmjweXr27Klhw4aprKxMkZGR17VP69atVVJSotWrV+vf//63OnfurKSkJD3xxBOX1ZaUlKi0tFSrV6/W6tWrre3dunXTsWPH5HQ6tWPHDs2ePVujRo1SdXW1unXrptGjR3s9WwXgxvBCRQDNyrFjxxQREaF9+/bdlD9T4fF41LNnTz399NNKSUlp9PMBuLm4IwQA3+DMmTNat26dXC7XNd8dBKB5IggBwDfo1KmTOnbsqFWrVqldu3ZeY23btv3G/T744AMNHz68sdsD4AN8NAYAN+Czzz77xrHvfve7Pnm1AIDGRxACAADG4isHAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACMRRACAADGIggBAABjEYQAAICx/g9S+4T+gugJKQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# get median salaries of senior-level data scientists for each company size and plot them in a bar plot.\n",
    "\n",
    "df[df['experience_level'] == 'SE'].groupby('company_size')['salary_in_usd'].median().plot.bar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "11687223",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_2022 = df[df['work_year'] == 2022]\n",
    "df_2023 = df[df['work_year'] == 2023]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "ee444e6d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1664, 11)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# how many rows and columns are there for each dataframe?\n",
    "\n",
    "df_2022.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "e7f70214",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1785, 11)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2023.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "bbbd1658",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "140400.0"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what are the differences in median salary for data scientists among the dataframes?\n",
    "\n",
    "result_1 = df_2022[df_2022['job_title'] == 'Data Scientist']['salary_in_usd'].median()\n",
    "result_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "bb277a48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "155500.0"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_2 = df_2023[df_2023['job_title'] == 'Data Scientist']['salary_in_usd'].median()\n",
    "result_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "7ab860ec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "15100.0"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_2 - result_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "3d2d1177",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "experience_level\n",
       "SE    1138\n",
       "MI     361\n",
       "EN     124\n",
       "EX      41\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# how many people were hired for each of the dataframe? what are the percentages of experience levels?\n",
    "# Note: answer to the first question is incorrect.\n",
    "\n",
    "df_2022['experience_level'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "d626c451",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "experience_level\n",
       "SE    0.683894\n",
       "MI    0.216947\n",
       "EN    0.074519\n",
       "EX    0.024639\n",
       "Name: proportion, dtype: float64"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2022['experience_level'].value_counts(normalize=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "4d9c33c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "experience_level\n",
       "SE    1287\n",
       "MI     320\n",
       "EN     118\n",
       "EX      60\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2023['experience_level'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "ff508afc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "experience_level\n",
       "SE    0.721008\n",
       "MI    0.179272\n",
       "EN    0.066106\n",
       "EX    0.033613\n",
       "Name: proportion, dtype: float64"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2023['experience_level'].value_counts(normalize=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "9665546c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1664, 11)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2022.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "ffe48ca6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1785, 11)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2023.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "76db2441",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "165000.0"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what is the median salary of senior data scientists for df2, given there is a 10% increment?\n",
    "\n",
    "df_2023[(df_2023['experience_level'] == 'SE') & (df_2023['job_title'] == 'Data Scientist')]['salary_in_usd'].median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "26952140",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "181500.00000000003"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2023[(df_2023['experience_level'] == 'SE') & (df_2023['job_title'] == 'Data Scientist')]['salary_in_usd'].median() * 1.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2371e393",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
